//===========================工具类函数============================
//只允许输入数字
function checkNumber(e) {
    var keynum = window.event ? e.keyCode : e.which;
    if ((48 <= keynum && keynum <= 57) || (96 <= keynum && keynum <= 105) || keynum == 8) {
        return true;
    } else {
        return false;
    }
}
//只允许输入小数
function checkForFloat(obj, e) {
    var isOK = false;
    var key = window.event ? e.keyCode : e.which;
    if ((key > 95 && key < 106) || //小键盘上的0到9  
        (key > 47 && key < 60) ||  //大键盘上的0到9  
        (key == 110 && obj.value.indexOf(".") < 0) || //小键盘上的.而且以前没有输入.  
        (key == 190 && obj.value.indexOf(".") < 0) || //大键盘上的.而且以前没有输入.  
         key == 8 || key == 9 || key == 46 || key == 37 || key == 39) {
        isOK = true;
    } else {
        if (window.event) { //IE
            e.returnValue = false;   //event.returnValue=false 效果相同.    
        } else { //Firefox 
            e.preventDefault();
        }
    }
    return isOK;
}

//检查短信字数
function checktxt(obj, txtId) {
    var txtCount = $(obj).val().length;
    if (txtCount < 1) {
        return false;
    }
    var smsLength = Math.ceil(txtCount / 62);
    $("#" + txtId).html("您已输入<b>" + txtCount + "</b>个字符，将以<b>" + smsLength + "</b>条短信扣取费用。");
}
//四舍五入函数
function ForDight(Dight, How) {
    Dight = Math.round(Dight * Math.pow(10, How)) / Math.pow(10, How);
    return Dight;
}
//写Cookie
function addCookie(objName, objValue, objHours) {
    var str = objName + "=" + escape(objValue);
    if (objHours > 0) {//为0时不设定过期时间，浏览器关闭时cookie自动消失
        var date = new Date();
        var ms = objHours * 3600 * 1000;
        date.setTime(date.getTime() + ms);
        str += "; expires=" + date.toGMTString();
    }
    document.cookie = str;
}

//读Cookie
function getCookie(objName) {//获取指定名称的cookie的值
    var arrStr = document.cookie.split("; ");
    for (var i = 0; i < arrStr.length; i++) {
        var temp = arrStr[i].split("=");
        if (temp[0] == objName) return unescape(temp[1]);
    }
    return "";
}

/**
 * 获取地址栏参数
 *       name：参数名称
 */
function GetQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return decodeURI(r[2]); return null;
};

//======================扩展js格式化日期======================
// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符， 
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
// 例子： 
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18 

Date.prototype.Format = function (fmt) { //author: meizz 
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "H+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};

// 对Date的扩展，增加Date的天数，负数则往前推时间，正数则向后推时间
Date.prototype.AddYear = function (year) {
    this.setYear(this.getFullYear() + year);
    return this;
};

// 对Date的扩展，增加Date的天数，负数则往前推时间，正数则向后推时间
Date.prototype.AddDay = function (day) {
    var dd = new Date();
    dd.setDate(dd.getDate() + day);
    return dd;
};

// 对Date的扩展，增加Date的小时，负数则往前推时间，正数则向后推时间
Date.prototype.AddHour = function (hour) {
    var dd = new Date();
    dd.setHours(dd.getHours() + hour);
    return dd;
};

// 对Date的扩展，增加Date的分钟，负数则往前推时间，正数则向后推时间
Date.prototype.AddMinutes = function (minutes) {
    var dd = new Date();
    dd.setMinutes(dd.getMinutes() + minutes);
    return dd;
};

//======================扩展js数组对象方法======================
// 对Array的扩展，移除指定的对象
Array.prototype.remove = function (val) {
    var index = this.indexOf(val);
    if (index > -1) {
        this.splice(index, 1);
    }
};

// 对Array的扩展，判断是否包含对像
Array.prototype.contains = function (val) {
    var index = this.indexOf(val);
    if (index > -1) {
        return true;
    } else {
        return false;
    }
};

// 对Array的扩展，判断是否包含对像
Array.prototype.containsobj = function(key, val) {
	var self = this;
	for (var i = 0; i < self.length; i++)
		if (self[i][key] == val) {
			return true;
		}
	return false;
};

// 扩展Array,根据某个属性字段获取对象
Array.prototype.getobj = function(key, val) {
	var self = this;
	for (var i = 0; i < self.length; i++)
		if (self[i][key] == val) {
			return self[i];
		}
};

// 对Array的扩展，返回包含对象的序号
Array.prototype.getindex = function (val) {
    var index = this.indexOf(val);
    if (index > -1) {
        return index;
    } else {
        return 0;
    }
};

// 对Date的扩展，根据月份获取每月天数
function getDays(month) {
    var date = [];
    switch (month) {
        case 2:
            for (var i = 1; i < 29; i++) { // 28天
                date.push(i);
            }
            break;
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            for (var i = 1; i < 32; i++) { // 31天
                date.push(i);
            }
            break;
        case 2:
        case 4:
        case 6:
        case 9:
        case 11:
        default:
            for (var i = 1; i < 31; i++) { // 30天
                date.push(i);
            }
            break;
    }
    return date;
};

//======================扩展js对象方法======================
// 对象扩展，检测是否为空  
String.prototype.IsNullOrEmpty = function () {
    var obj = this;
    var flag = false;
    if (obj == null || obj == undefined || typeof (obj) == 'undefined' || obj == '') {
        flag = true;
    } else if (typeof (obj) == 'string') {
        obj = obj.trim();
        if (obj == '') {//为空  
            flag = true;
        } else {//不为空  
            obj = obj.toUpperCase();
            if (obj == 'NULL' || obj == 'UNDEFINED' || obj == '{}') {
                flag = true;
            }
        }
    }
    else {
        flag = false;
    }
    return flag;
};

/** 扩展String事件，使用方法同C#的格式化字符串 */
String.prototype.format = function (args) {
    var result = this;
    if (arguments.length > 0) {
        if (arguments.length == 1 && typeof (args) == "object") {
            for (var key in args) {
                if (args[key] != undefined) {
                    var reg = new RegExp("({" + key + "})", "g");
                    result = result.replace(reg, args[key]);
                }
            }
        }
        else {
            for (var i = 0; i < arguments.length; i++) {
                if (arguments[i] != undefined) {
                    var reg = new RegExp("({)" + i + "(})", "g");
                    result = result.replace(reg, arguments[i]);
                }
            }
        }
    }
    return result;
}

/** 扩展String事件，去除空格 */
String.prototype.Trim = function () {
    return this.replace(/\s/gi, "")
}

/** 自定义全文搜索关键字信息 */
function searchTarget(searchtext) {//查找处理
    var reg = new RegExp(searchtext, "g");
    var objtext = document.body.innerHTML;
    var sCurText;
    if (!reg.exec(objtext)) {//没找到
        console.log(" can not find!");
        return;
    }
    else {//找到
        var newinner = objtext.replace(reg, '<span style="color:red">' + searchtext + '</span>')//处理HTML字符串，为目标文本加上样式，即替换对应的HTML结构
        document.body.innerHTML = newinner;//把处理后的HTML字符串写回到容器中
    }
}